import javax.swing.text.PlainDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.JTextField;
import java.awt.Toolkit;

public class NegativeDoubleDocument
extends PlainDocument
{
    private boolean bDot = false;
    /***************************************************************************
     * Funktion erlaubt ein minus oder + (nicht sichtbar) in den Zahlen
     * @param offset int
     * @param s string
     * @param attributeSet att
     * @throws BadLocationException
     **************************************************************************/
    public void insertString(int offset, String s, AttributeSet attributeSet) throws
    BadLocationException
    {
        try
        {
            if(s.equals(",")) //ersetzt den , durch einen Punkt
                s = ".";
            bDot = getText(0,getLength()).indexOf(".") == -1 ? false : true; //merkt sich ob ein Punkt oder nicht
            if (s.length() > 1)
            {
                //wenn der String größer als 1 ist, ist es eine ganze IP und somit eine Schleife
                for(int x = 0; x != s.length(); x++)
                    insertString(x,s.substring(x,x+1).replaceFirst(",","."),null); //ersetzt , durch Punkt
                //mach gar nix, weil die for schleife alles macht!
                return;
            }
            else if(s.equals("-"))
            {
                String strTmp = getText(0,getLength()); //holt sich den Text
                System.out.println(strTmp);
                if(strTmp.indexOf("-")!=-1) //schaut nach ob ein minus vorhanden ist
                    strTmp = strTmp.replaceAll("-",""); //wenn ja weg
                else
                    strTmp = "-" + strTmp;
                replace(0,getLength(),null,attributeSet);
                super.insertString(0,strTmp,attributeSet);
                return;
            }
            else if(s.equals("+")) //bei einem + einfach ein weiteres - hinzufügen
            {
                if(getText(0,getLength()).indexOf("-")!=-1)
                    insertString(0,"-",attributeSet); //ruft sich selbst mit - auf und dann kommt obige ßberprüfung
                return;
            }
            //OPTIONAL!! STATT DEM Â± kann man jedes Zeichen nehmen oder komplett weglassen
            //wenn man irgendwelche Zeichen zB noch haben will <!--- OPTIONAL ---!>
            else if(s.equals("Â±"))
            {
                String strTmp = getText(0,offset);
                if(strTmp.indexOf("Â±") != -1)
                    strTmp = strTmp.replaceAll("Â±","");
                else
                    strTmp = "Â±" + strTmp;
                replace(0,getLength(),null,attributeSet);
                super.insertString(0,strTmp,attributeSet);
                return; //damit aufgehört wird
            }
            //ENDE OPTIONAL!!
            //wenn das aktuelle Zeichen kein punkt ist oder wenn es ein Punkt ist und schon ein Punkt eingegegeben ist
            else if(!s.equals(".") || bDot)  // ==   if(!(s.equals(".") && !bDot))
                Double.parseDouble(s);

        }
        catch(Exception ex)
        {
            Toolkit.getDefaultToolkit().beep();
            return;
        }
        super.insertString(offset,s, attributeSet);
    }
}